perm filename EADD8.2[EAL,HE]1 blob sn#674843 filedate 1982-09-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	{$NOMAIN	Editor: aux routine for addStmnt: addCmon }
C00005 00003	(* addStmnt: aux routine: addCmon *)
C00008 ENDMK
C⊗;
{$NOMAIN	Editor: aux routine for addStmnt: addCmon }

%include eedit.hdr;

{ Externally defined routines from elsewhere: }

	(* From ALLOC *)
function newStatement: statementp;				external;

	(* From EAUX1A *)
function eMakeVar(vartype: datatypes; vid: identp): varidefp;	external;
procedure pushStmnt(s: statementp; indent: integer);		external;

	(* From EAUX2A *)
procedure eMakeNewVar(newvar: varidefp);			external;

	(* From ETOKEN *)
procedure eGetToken;						external;

	(* From EPAR3E *)
procedure eCmonParse(st: statementp; getStart: boolean);	external;

	(* From EAUX3C - addStmnt aux routines *)
function getEmptyStmnt(sp:statementp): statementp;		external;
procedure addNSt(sty: stmntypes; nextLinep: cursorpp; 
	var sp: statementp; slabel: varidefp; 
	emptyp,stok: boolean; var nogood: boolean);		external;
function addNode(nextLinep: cursorpp; slabel:varidefp): nodep;	external;
procedure addNEnv;						external;

	(* From PP *)
procedure relLine(l: linerecp);					external;
procedure ppLine; 						external;
procedure ppOutNow; 						external;
procedure ppChar(ch: ascii); 					external;
procedure pp5(ch: c5str; length: integer); 			external;
procedure pp10(ch: cstring; length: integer); 			external;
procedure pp10L(ch: cstring; length: integer);			external;
procedure pp20(ch: c20str; length: integer); 			external;
procedure pp20L(ch: c20str; length: integer); 			external;

(* addStmnt: aux routine: addCmon *)

procedure addCmon(defer: boolean; nextLinep: cursorpp; var sp: statementp;
       slabel: varidefp; emptyp,clok,stok: boolean; var nogood: boolean); external;
procedure addCmon;
 var n: nodep; v: varidefp;
 begin
 if not clOk then addNSt(cmtype,nextLinep,sp,slabel,emptyp,stok,nogood)
  else
   begin
   sp := newStatement;
   with sp↑ do
    begin
    stype := cmtype;
    stlab := slabel;
    exprs := nil;
    if slabel <> nil then
      begin
      slabel↑.s := sp;
      nlines := 2;
      end;
    end;
   n := addNode(nextLinep,slabel);
   with n↑ do
    begin
    ntype := cmonnode;
    cmon := sp;
    end;
   curLine := cursorLine - 1;
   if slabel <> nil then curline := curline - 1;
   pushStmnt(sp,0);
   end;
 v := eMakeVar(cmontype,nil);
 v↑.s := sp;
 with sp↑ do
  begin
  deferCm := defer;
  oncond := nil;
  conclusion := getEmptyStmnt(sp);
  cdef := v;
  nlines := nlines + 1;
  end;
 eCmonParse(sp,false);
 eGetToken;
 if not endOfLine then
   with eCurToken do
    if (ttype <> reswdtype) or (rtype <> filtype) or 
       (filler <> dotype) then
      begin
      pp20L(' Need a "DO" here   ',17); ppLine;
      eBackup := true
      end;
 addNEnv;			(* make up a new environment if needed *)
 eMakeNewVar(v);		(* if active block make env entry for var *)
 end;